import Konva from "konva";
import { Draw } from "../../../Draw/Draw";
import { groupMultiple } from "./group-multiple";
import { contextmenuHandle } from "./contextmenu";
import { IKonva } from "../../../Interface/IKonva";
import { setGroupTransformer } from "./group-transformer";

/**
 * Konva Graph 基类点击事件处理函数
 */
export function groupClick(e: IKonva.Event, draw: Draw) {
  e.cancelBubble = true;

  // 如果处于插入状态
  const stage = draw.getStage();
  if (stage.getAttr("insertShape")) return;

  const group = <Konva.Group>e.target.parent;

  // 左键选中元素
  if (e.evt.button === 0) {
    const layer = draw.getLayer();
    if (!layer) return;

    const { shiftKey, ctrlKey } = e.evt;

    // 是否多选
    if (shiftKey || ctrlKey) {
      // 标记激活状态
      group.setAttr("selected", true);

      groupMultiple(draw);
      return;
    }

    // 清空所有的形变 包括取消选中节点属性
    draw.clearTransformer();
    draw.clearLineControl();
    draw.clearSelected();

    // 为当前节点创建形变节点 - 不能为 Group 创建形变节点，不然文本会跟随缩放
    setGroupTransformer(draw, group);
  }

  // 右键打开 contextmenu
  if (e.evt.button === 2) {
    // 清空所有的形变 包括取消选中节点属性
    draw.clearTransformer();
    draw.clearLineControl();
    draw.clearSelected();

    // 选中当前节点
    setGroupTransformer(draw, group);
    contextmenuHandle(e, draw, "group");
  }
}
